package com.huawei.classroom.student.h10;

import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;

/**
 * 把你作业的代码写到这个类里面
 * 不可以修改类的名字、包名、和固有的几个方法名以及方法的可见性
 * 可以增加其他方法、属性、类
 * 可以引用jdk的类
 * 不要引用jdk1.8以外第三方的包
 * 
 * @author cjy
 *
 */
public class Home10 {
	public Home10() {
	} 
	/**
	 * 将一个字符串中字符按出现频率的高到低排序返回，如果两个字符出现的频率一样，则将最先出现的字符排在前面
	 * 例如：orderChar(“abcdefg”)返回 “abcdefg” 
	 * orderChar(“abcdefgg”)返回 “gabcdef”
	 * orderChar(“abcdefgge”)返回 “egabcdf”
	 * orderChar(“天津大学软件学院”)返回 “学天津大软件院”
	 * @param content
	 * @return
	 */
	public String orderChar(String content) {
		
	    Map<String,Integer> map=new LinkedHashMap<>();
		 int len=content.length();
		 for(int i=0;i<len;i++){
		    String k=content.substring(i,i+1);
		    //System.out.println(k);
		    Integer v=map.getOrDefault(k,null);
		    if(v==null){
		        map.put(k,new Integer(1));
		    }else{
		        map.put(k,v+1);
		    }
		 }
		 Set<Map.Entry<String,Integer>> keyset=map.entrySet();
		 Set<Map.Entry<String,Integer>> list=new TreeSet<>(new Comparator<Map.Entry<String,Integer>>(){

			@Override
			public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
				// TODO Auto-generated method stub
				if(o1.getKey().equals(o2.getKey())) {
					return 0;
				}
				int a=o2.getValue()-o1.getValue();
				return (a==0)?1:a;
			}
		 
		 });
		 //System.out.println(map.size());
		 list.addAll(keyset);
		 //System.out.println(list.size());
		 StringBuffer maxsf=new StringBuffer();
		 
		 for(Map.Entry<String,Integer> entry:list){
			 
		    maxsf.append(entry.getKey());
		    
		 }
		 //System.out.println(maxsf.toString());
		return maxsf.toString();
		
	}
	
}
